package org.tests;

import java.net.URI;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import net.spy.memcached.internal.GetFuture;
import net.spy.memcached.internal.OperationFuture;

import com.couchbase.client.CouchbaseClient;

public class StorageTest {

	public static void main(String[] args) {

		System.out
				.println("--------------------------------------------------------------------------");
		System.out.println("\tCouchbase Storage Operations");
		System.out
				.println("--------------------------------------------------------------------------");

		List<URI> uris = new LinkedList<URI>();

		uris.add(URI.create("http://127.0.0.1:8091/pools"));

		CouchbaseClient cb = null;
		try {
			cb = new CouchbaseClient(uris, "default", "");

			{
				System.out.println("Set a Key-Value and Get the Key-Value");
				cb.set("mytest", 0, "my value");
				System.out.println("cb.get(\"mytest\")" + " => "
						+ cb.get("mytest") + "\"");
				System.out.println("");
			}

			{
				System.out.println("Try to Add the same key");
				OperationFuture op = cb.add("mytest", 0, "my value added");
				if (op.getStatus().isSuccess()) {
					System.out
							.println("Document saved.. should not be possible");
				} else {
					System.out
							.println("Message " + op.getStatus().getMessage());

				}
				System.out.println("");
			}

			{
				System.out.println("Replace the key-value with Replace");
				cb.replace("mytest", 0, "my value replaced");
				System.out.println("New value : " + cb.get("mytest"));
				System.out.println("");
			}

			{
				System.out
						.println("Try to replace non-existent key, raises exception");
				OperationFuture op = cb.replace("mytest4", 0,
						"my value4 replaced");
				if (op.getStatus().isSuccess()) {
					System.out
							.println("Document saved.. should not be possible");
				} else {
					System.out.println("Message " + op.getStatus());

				}

				System.out.println("");
			}

			{
				System.out.println("Add another Key-Value pair");
				cb.add("mytest3", 0, "my value3");
				System.out.println("cb.get(\"mytest3\")" + " => "
						+ cb.get("mytest3"));

				System.out.println("");

			}

			{
				System.out.println("Delete Both Store Key");
				cb.delete("mytest");
				cb.delete("mytest3");
				System.out.println("");

			}

			{
				System.out.println("Delete Both Store Key");
				Object o = cb.get("mytest");
				System.out.println("Get deleted key :" + o);

				GetFuture op = cb.asyncGet("mytest");
				if (op.getStatus().isSuccess()) {
					System.out
							.println("Document saved.. should not be possible");
				} else {
					System.out.println("Message " + op.getStatus());

				}

				System.out.println("");

			}

			System.out.println("\n\n\n\n");

			cb.shutdown(10, TimeUnit.SECONDS);

		} catch (Exception e) {
			System.err.println("Error connecting to Couchbase: "
					+ e.getMessage());
		}

	}

}
